算法_动态规划_独立任务最优调度问题

问题描述
  用2 台处理机A 和B 处理n个作业。设第i 个作业交给机器A 处理时需要时间ai,若由机器B来处理,则需要时间bi。由于各作业的特点和机器的性能关系,很可能对于某些i,有ai>=bi,而对于某些j,j≠i,有aj

import java.util.Scanner;

public class Main {
    private static int n;
    private static int[] a;
    private static int[] b;
    private static int aSum=0;
    private static int bSum=0;
    private static boolean[][][] p;

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        a=new int[n+1];
        b=new int[n+1];

        for(int i=1;i<=n;i++){
            a[i]=sc.nextInt();
            aSum+=a[i];
        }
        for(int i=1;i<=n;i++){
            b[i]=sc.nextInt();
            bSum+=b[i];
        }

        p=new boolean[aSum+1][bSum+1][n+1];

        for(int i=0;i<=aSum;i++){
            for(int j=0;j<=bSum;j++){
                p[i][j][0]=true;
            }
        }

        for(int k=1;k<=n;k++){
            for(int i=0;i<=aSum;i++){
                for(int j=0;j<=bSum;j++){
                    if(i>=a[k]){
                        p[i][j][k]=p[i-a[k]][j][k-1];
                    }
                    if(j>=b[k]){
                        p[i][j][k]=p[i][j][k]||p[i][j-b[k]][k-1];
                    }
                }
            }
        }
        int minIJ=Integer.MAX_VALUE;
        for(int i=0;i<=aSum;i++){
            for(int j=0;j<=bSum;j++){
                if(p[i][j][n]){
                    if(Math.max(i,j)<minIJ){
                        minIJ=Math.max(i, j);
                    }
                }
            }
        }

        System.out.println(minIJ);
    }

}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实验原理: 在独立任务调度问题中,每个任务都有一个执行时间和一个截止时间,任务之间没有任何依赖关系。任务调度的目标是在满足所有任务的截止时间的前提下,最大化已完成任务的数量。这是一个经典的NP完全问题,因此需要采用高效的算法来解决。 动态规划是一种重要的解决最优化问题的算法,可以用于解决独立任务调度问题动态规划算法的基本思想是将问题分解成一系列重叠的子问题,并通过求解子问题的最优解来求解原问题的最优解。 解题步骤: 1. 确定状态:在独立任务调度问题中,状态可以用一个二元组(i, t)来表示,其中i表示任务的编号,t表示当前时间。 2. 确定状态转移方程:根据题目中的约束条件和目标函数,设计状态转移方程,用于计算每个状态的最优解。 3. 初始化状态:将第一个任务的状态作为初始状态,即(i, 0),其中i为第一个任务的编号,时间为0。 4. 递推求解:利用状态转移方程,从初始状态开始逐步计算每个状态的最优解,直到达到最终状态,即(n, T),其中n为任务数量,T为所有任务的最大截止时间。 5. 回溯求解:根据递推计算所得的最优解,回溯求解出每个任务最优调度方案。 以上是解决独立任务调度问题动态规划算法的基本步骤。需要根据具体情况进行算法的设计和实现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值